函数基础知识

现在您已经了解了 move 的所有基础知识,让我们直接学习如何使用 move 中的函数。

函数定义

在 move 中,函数是执行发生的地方。您可以使用 fun 关键字定义函数。您可能已经注意到,构造函数也是使用 fun 关键字定义的。让我们看看如何在 move 中定义函数。

#![allow(unused)]
fn main() {
fun function_name() {
	// Function code goes here
}
}

这是编写函数的最简单方法,其中没有提到参数或返回类型。

模块中的函数

如您所知,我们将所有内容编写在 move 的模块内。现在,让我们通过一个示例来看看模块内部的结构。

#![allow(unused)]
fn main() {
module examples::example {

	fun add(num_1: u64, num_2: u64) {
		let sum = num_1 + num_2;
	}
}
}

在这里,我们没有返回,只是传递了参数并添加了它们。

函数参数

正如您所看到的,与所有其他编程语言一样,您可以将参数传递给函数。传递参数的格式为 variable_name: data_type 。您可以不向函数传递任何参数,也可以向函数传递多个参数。让我们看一下编码示例。

#![allow(unused)]
fn main() {
module examples::example {
	fun function_name(argument_1: u8, argument_2: u8) {
		// Function code goes here
	}
}
}

函数参数是在函数范围内定义的。当函数被销毁时,参数也会被销毁。以下是传递函数参数的基本语法指针。

  1. 多个参数使用逗号分隔。
  2. 所有参数都在括号内定义。

函数返回

由于我们都喜欢从函数返回值,move 也可以做到这一点。为了定义函数的返回类型,我们在括号外提及数据类型: fun fun_name(): data_type {} 。让我们看一下编码示例。

#![allow(unused)]
fn main() {
module examples::example {
	fun function_name(argument_1: u8, argument_2: u8): u8 {
		// Function code goes here
	}
}
}

现在,我们如何从函数返回一个值?为此,我们不需要 move 中的 return 关键字。我们只需编写一个表达式、一个变量名和一个返回任意值的函数名,函数末尾无需任何其他关键字。让我们看一下编码示例。

#![allow(unused)]
fn main() {
module math::math {
	fun sum(a: u8, b: u8): u8 {
		a + b
	}
}
}

这里, sum 函数返回 a + b 的值。让我们看另一个例子。

module examples::strings {
	use sui::object::UID;
	use sui::tx_context::{Self, TxContext};

	// std::string import
	use std::string::{Self, String};
		
	// Declaring the Name
	public struct Name has key {
		id: UID,
		name: String,
	}

	// Initializing the constructor
	fun fill_name(name_bytes: vector<u8>, ctx: &mut TxContext): Name {
		Name {
			id: object::new(ctx),
			name: string::utf8(name_bytes)
		}
	}
}

在本例中, fill_name 函数将返回一个对象 Name

小结

函数在任何编程语言中都发挥着重要作用。因此,了解每种编程语言如何使用函数非常重要。接下来,我们将探讨函数的可见性说明符,以涵盖在 move 中使用函数的高级主题

quiz

解释模块内函数的结构,并提供示例说明模块内函数的结构